import App from './App';

import uView from "uview-ui";
Vue.use(uView);

import store from './store';
Vue.prototype.$store = store;

import lodash from 'lodash';
Vue.prototype.$lodash = lodash; //lodash js库

import common from './common/js/index.js';
Vue.prototype.$f = common; //全局公用方法 this.$f.方法名()

import allConfig from './http/config.js';
Vue.prototype.$allConfig = allConfig; //全局配置 this.$allConfig.方法名()

import api from './http/request.js';
Vue.prototype.$api = api; //请求

//请求配置
api.setConfig({
	baseUrl: allConfig.appurl,
	debug: allConfig.debug
})

// 请求拦截器配置
api.interceptor.request = (config => {
	// 给header添加全局请求参数token
	if (!config.header.token || !config.header.wanlshop) {
		let wanlLogin = uni.getStorageSync("userInfo").token;
		if (wanlLogin) {
			config.header['Authorization'] = wanlLogin;
		}
		config.header.type = 'companion';
		// 设置语言
		config.header['Accept-Language'] = 'zh-CN,zh;q=0.9';
	}
	// 添加一个自定义的参数，默认异常请求都弹出一个toast提示
	if (config.toastError === undefined) {
		config.toastError = true
	}
	return config;
})

//全局的业务拦截
api.interceptor.response = ((res, config) => {
	if (res.code === 200) {
		res.success = true;
	} else if (res.code === 401) { // token失效，需要重新登录
		console.log('没有登陆');
		uni.navigateTo({
			url: '/pages/login'
		})
	}
	allConfig.debug ? console.log(res) : '';
	return res;
})

//全局错误提示
api.interceptor.fail = ((res, config) => {

	console.log('--------》', res)
	var error = '';
	//业务错误、没有登录、没有权限
	if (res.statusCode === 200) {
		if (res.data.code == 401) {
			error = '请先登录';
		} else {
			error = res.data.msg;
		}
	} else if (res.statusCode === 401) {
		error = res.data.msg;
	} else if (res.statusCode === 403) {
		error = res.data.msg;
	} else if (res.statusCode === 404) {
		error = 'API接口不存在';
	} else if (res.statusCode === 500) {
		error = '服务器繁忙';
	} else {
		error = 'API接口异常';
	}
	if (res.errMsg == 'request:fail abort statusCode:-1') {
		allConfig.debug ? console.log(res) : '';
	} else {
		config.toastError ? common.msg(error) : '';
	}
	return res;
})

Vue.prototype.publicMessage = function() {
	if (!uni.getStorageSync('userInfo').token) return
	this.$api.get({
		url: '/uni/message/unreadCount',
		data: {
			userType: 2
		},
		success: res => {
			console.log('未读消息', res);
			if (res) {
				uni.setTabBarBadge({
					index: 1, // tabBar 的索引（从0开始，这里是消息页）
					text: res.toString() // 角标内容，必须是字符串
				});
			} else {
				uni.removeTabBarBadge({
					index: 1,
				});
			}
		},
		fail: err => {
			uni.removeTabBarBadge({
				index: 1,
			});
		}
	})
}

//副文本限制图片宽度
Vue.prototype.formatRichText = function(html) {
	if (!html) return '';
	// 方案2：更全面的图片样式处理
	const newHtml = html.replace(/<img[^>]*>/gi, (match) => {
		// 移除原有width/height属性
		match = match.replace(/(width|height)=["'][^"']*["']/gi, '');

		// 处理style属性
		if (match.includes('style="')) {
			// 移除原有width/height样式
			match = match.replace(/(style="[^"]*)(width:[^;"]+;?)([^"]*")/gi, '$1$3');
			match = match.replace(/(style="[^"]*)(height:[^;"]+;?)([^"]*")/gi, '$1$3');
			// 添加响应式样式
			return match.replace('style="',
				'style="max-width:100% !important;height:auto !important;display: block;"');
		} else {
			// 没有style属性时添加
			return match.replace('<img',
				'<img style="max-width:100% !important;height:auto !important;display: block;"');
		}
	});
	return newHtml;
}

import Vue from 'vue'
App.mpType = 'app'
const app = new Vue({
	store,
	...App
})
app.$mount()


// 请求例子 this.$api.post({url:'请求地址'，data:{参数}，loadingTip:'加载框'，loadingDuration:'loading显示时间'，success ，fail})
// 上传例子 this.$api.upload({url:'上传地址..this.$allConfig.uploadUrl',filePath:'图片路径'，name：'file',其他参数见uni.uploadFile，succes，fail})